/*
 * @Descripttion: 动态生成 Swagger host 配置
 * @version: 1.0.0
 * @Author: pyq
 * @Date: 2024-10-15
 * @LastEditors: pyq
 * @LastEditTime: 2024-10-18 22:40:39
 */

import Router from "koa-router";
import swaggerJsDoc from "swagger-jsdoc";
import path from "path"; // 引入 path 模块
import { fileURLToPath } from "url"; // 引入 fileURLToPath
import { dirname } from "path"; // 引入 dirname

const __filename = fileURLToPath(
    import.meta.url);
const __dirname = dirname(__filename);

// 静态的 Swagger 配置，但不包含 host 信息
const swaggerOptions = {
    swaggerDefinition: {
        info: {
            title: "Koa 学习接口文档",
            version: "1.0.0",
            description: "API",
        },
        basePath: "/", // 全局路径前缀
    },
    apis: [path.join(__dirname, "../routes/*.js")], // 引入 API 路由文件
};

// 定义路由
const router = new Router();

// 动态生成 Swagger 文档
router.get("/swagger.json", async(ctx) => {
    // 动态获取请求的 host 地址
    const host = ctx.host;

    // 动态生成 Swagger 文档
    const swaggerSpec = swaggerJsDoc({
        ...swaggerOptions,
        swaggerDefinition: {
            ...swaggerOptions.swaggerDefinition,
            host, // 动态设置主机地址
        },
    });

    // 设置响应类型为 JSON
    ctx.set("Content-Type", "application/json");
    ctx.body = swaggerSpec;
});

export default router;